package Facade;

/**
 * @Author: Cjj
 * 外观模式
 *  隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。
 *  这种类型的设计模式属于结构型模式，它向现有的系统添加了一个接口，来隐藏系统的复杂性
 *  这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用
 * 意图：
 *  为一个复杂的子系统提供一个一致的高层接口。这样，客户端代码就可以通过这个简化的接口与子系统
 *  交互，而不需要了解子系统内部的复杂性
 * 主要解决的问题：
 *  降低客户端与复杂子系统之间的耦合度
 *  简化客户端对复杂系统的操作,隐藏内部实现细节
 * 使用场景
 *  当客户端不需要了解系统内部的复杂逻辑和组件交互时。
 *  当需要为整个系统定义一个清晰的入口点时。
 *优点：
 * 1.减少依赖：客户端与子系统之间的依赖减少。
 * 2.提高灵活性：子系统的内部变化不会影响客户端口。
 * 3.增强安全性：隐藏了子系统的内部实现，只暴露必要的操作。
 *缺点：
 * 违反开闭原则：对子系统的修改可能需要对外观类进行相应的修改
 *
 */
public interface Shape {
    void  draw();
}
